package com.kevin.Code.String;

/**
 * @author Vinlee Xiao
 * @Classname StringtoIntegerAtoi
 * @Description Leetcode 8. 字符串转换整数 (atoi) 中等难度
 * @Date 2021/11/1 22:11
 * @Version 1.0
 */
public class StringtoIntegerAtoi {

    /**
     * @param s
     * @return
     */
    public int myAtoi(String s) {

        //1.去掉空格
        String s1 = s.trim();
        int len = s1.length();

        //2.第一步读取符号
        int sign = 1;
        boolean isSign = false;
        //用于标志是否先碰到数字
        boolean isDight = false;
        long result = 0;
        //第一步
        for (int i = 0; i < len; i++) {

            char ch = s1.charAt(i);
            //如果先遇到数字 后遇到符号 直接返回0

            //2.1第一步判断是否带符号位 是否是在字符串中第一次出现
            //加
            if ((ch == '+' || ch == '-') && !isSign && !isDight) {
                if (ch == '-') {
                    sign = -1;

                }
                isSign = true;
                continue;
            }

            //2.2如果遇到非数字字符直接退出
            //注意前几个是0的情况
            if ((ch - '0' < 0 || ch - '0' > 9)) {
                break;
            } else {
                //遇到数字
                int num = ch - '0';
                isDight = true;
                result = result * 10 + num;
                if (result * sign < Integer.MIN_VALUE) {
                    return Integer.MIN_VALUE;
                } else if (result * sign > Integer.MAX_VALUE) {
                    return Integer.MAX_VALUE;
                }
            }
            //记录数字
        }

        return (int) result * sign;
    }

    public static void main(String[] args) {
        StringtoIntegerAtoi stringtoIntegerAtoi = new StringtoIntegerAtoi();
        int i = stringtoIntegerAtoi.myAtoi("-0012a42");
        System.out.println(i);
    }
}
